/*
    7-10 单链表基本操作
请编写程序实现单链表插入、删除结点等基本算法。给定一个单链表和一系列插入、删除结点的操作序列，输出实施上述操作后的链表。单链表数据域值为整数。

输入格式:
输入第1行为1个正整数n，表示当前单链表长度；第2行为n个空格间隔的整数，为该链表n个元素的数据域值。
第3行为1个正整数m，表示对该链表施加的操作数量；接下来m行，每行表示一个操作，为2个或3个整数，格式为0 k d或1 k。
0 k d表示在链表第k个结点后插入一个数据域值为d的结点，若k=0则表示表头插入。1 k表示删除链表中第k个结点，此时k不能为0。
注：操作序列中若含有不合法的操作（如在长度为5的链表中删除第8个结点、删除第0个结点等），则忽略该操作。n和m不超过100000。

输出格式:
输出为一行整数，表示实施上述m个操作后的链表，每个整数后一个空格。输入数据保证结果链表不空。

输入：
    5
    1 2 3 4 5
    5
    0 2 8
    0 9 6
    0 0 7
    1 0 
    1 6

输出：7 1 2 8 3 5 
*/

#include <stdio.h>

#include <iostream>
#include <list>
using namespace std;

int main() {
    int n, m;
    scanf("%d", &n);
    list<int> la;
    for (int i = 0; i < n; ++i) {
        int num;
        scanf("%d", &num);
        la.push_back(num);
    }

    scanf("%d", &m);
    while (m--) {
        //op=0或1
        int op, pos, num;
        scanf("%d", &op);
        if (op == 1) {
            scanf("%d", &pos);
            //1 k 表示删除链表中第k个结点，此时k不能为0
            //pos:[1, la.size()]
            if (pos <= 0 || pos > la.size()) continue;
            //这里的continue是指结束当前循环，进行下一次while循环
            for (auto iter = la.begin(); iter != la.end(); ++iter, pos--) {
                if (pos == 1) {
                    la.erase(iter);
                    break;
                    //break是指跳出当前的for循环，向下进行，也就是进行下一次while循环
                }
            }
        } else if (op == 0) {
            //0 k d 表示在链表第k个结点「后」插入一个数据域值为d的结点
            //pos:[0, la.size()]
            scanf("%d%d", &pos, &num);
            //这里的continue是指结束当前循环，进行下一次while循环
            if (pos < 0 || pos > la.size()) continue;
            //在末尾插入一个结点
            if (pos == la.size()) {
                la.push_back(num);
                continue;
                //这里的continue是指结束当前循环，进行下一次while循环
                //这里不能使用break是因为：这里是一个if，不是for，如果用break，会直接跳出while循环
            }
            for (auto iter = la.begin(); iter != la.end(); ++iter, pos--) {
                if (pos == 0) {
                    la.insert(iter, num);
                    break;
                    //break是指跳出当前的for循环，向下进行，也就是进行下一次while循环
                }
            }
        }
    }
    for (auto iter = la.begin(); iter != la.end(); ++iter) printf("%d ", *iter);

    return 0;
}
